/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package AccesoWS;

import DTOs.DTORestaurante;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import restaurante.ClienteVO;
import restaurante.MesaVO;
import restaurante.SedeVO;

/**
 *
 * @author Julian
 */
public class WSRestaurante {

    public static List<restaurante.SedeVO> getSedes () throws Exception{

        try { // Call Web Service Operation
            restaurante.ClienteDinnerService service = new restaurante.ClienteDinnerService();
            restaurante.ClienteDinner port = service.getClienteDinnerPort();
            // TODO process result here
            java.util.List<restaurante.SedeVO> result = port.getSedes();

            System.out.println("Result sedes = "+result);
            return result;
        } catch (Exception ex) {
           throw ex;
        }

    }

    public static List<restaurante.MesaVO> getmesasdispobibles(int year, int month, int day , int idSede)  throws Exception{

        try { // Call Web Service Operation
            restaurante.ClienteDinnerService service = new restaurante.ClienteDinnerService();
            restaurante.ClienteDinner port = service.getClienteDinnerPort();
            // TODO initialize WS operation arguments here
            //javax.xml.datatype.XMLGregorianCalendar fecha = new javax.xml.datatype.XMLGregorianCalendar() {};
            DatatypeFactory factory = DatatypeFactory.newInstance();
                XMLGregorianCalendar fecha=factory.newXMLGregorianCalendar();
                fecha.setDay(day);
                fecha.setMonth(month);
                fecha.setYear(year);
                fecha.setHour(0);
                fecha.setMinute(0);
                fecha.setSecond(0);
                //chanbonazo X_X
            restaurante.SedeVO sedevo = getSedes().get(idSede-1);            // TODO process result here

            java.util.List<restaurante.MesaVO> result = port.consultarMesasDisponibles(fecha, sedevo);
            System.out.println("Result mesas= "+result);
             return result;
        } catch (Exception ex) {
            throw ex;
        }

    }

    public static boolean autenticar(int idd, String pass) throws Exception  {

        try { // Call Web Service Operation
            restaurante.ClienteDinnerService service = new restaurante.ClienteDinnerService();
            restaurante.ClienteDinner port = service.getClienteDinnerPort();
            // TODO initialize WS operation arguments here
            java.lang.Integer id = Integer.valueOf(idd);
            java.lang.String password = pass;
            // TODO process result here
            boolean result = port.autenticar(id, password);
            System.out.println("Result = "+result);
            return result;
        } catch (Exception ex) {
             throw ex;
        }



    }

    public static ClienteVO  getClienteVObyId (int idd) throws Exception {

            try { // Call Web Service Operation
                restaurante.ClienteDinnerService service = new restaurante.ClienteDinnerService();
                restaurante.ClienteDinner port = service.getClienteDinnerPort();
                // TODO initialize WS operation arguments here
                java.lang.Integer id = Integer.valueOf(idd);
                // TODO process result here
                restaurante.ClienteVO result = port.getClienteVOById(id);
                System.out.println("Result = "+result);
                return result;
            } catch (Exception ex) {
                throw ex;
            }

        }

    //preguntar q carajos hace esto
    public static List<restaurante.ReservaVO> darReservas() throws Exception {

        try { // Call Web Service Operation
            restaurante.ClienteDinnerService service = new restaurante.ClienteDinnerService();
            restaurante.ClienteDinner port = service.getClienteDinnerPort();
            // TODO initialize WS operation arguments here
            restaurante.MesaVO mesavo = new restaurante.MesaVO();

            // TODO process result here
            java.util.List<restaurante.ReservaVO> result = port.darReservas(mesavo);
            System.out.println("Result = "+result);
            return result;
        } catch (Exception ex) {
           throw ex;
        }

    }

    //preguntarle a ariza porq no retorna nada ¡¡¡¡
    public static void  saveCliente(int cedula, String email,String nombre, String pass, int phone) throws Exception{

        try { // Call Web Service Operation
            restaurante.ClienteDinnerService service = new restaurante.ClienteDinnerService();

            restaurante.ClienteDinner port = service.getClienteDinnerPort();
            // TODO initialize WS operation arguments here
            restaurante.ClienteVO clientevo = new restaurante.ClienteVO();
            clientevo.setCedula(cedula);
            clientevo.setEmail(email);
            clientevo.setNombre(nombre);
            clientevo.setPassword(pass);
            clientevo.setTelefono(phone);
            port.saveCliente(clientevo);
        } catch (Exception ex) {
            throw ex;
        }

    }

    public static int registrarReservas(int idSede, int idMesa, int idCliente, int day, int month, int year) throws Exception {

        try { // Call Web Service Operation
            restaurante.ClienteDinnerService service = new restaurante.ClienteDinnerService();
            restaurante.ClienteDinner port = service.getClienteDinnerPort();
            // TODO initialize WS operation arguments here
            restaurante.ClienteVO clientevo = getClienteVObyId(idCliente);

            restaurante.MesaVO mesavo = getSedes().get(idSede).getMesaCollection().get(idMesa);
            restaurante.ReservaVO reservavo = new restaurante.ReservaVO();
            // TODO process result here
            DatatypeFactory factory = DatatypeFactory.newInstance();
                XMLGregorianCalendar fecha=factory.newXMLGregorianCalendar();
                fecha.setDay(day);
                fecha.setMonth(month);
                fecha.setYear(year);
                fecha.setHour(0);
                fecha.setMinute(0);
                fecha.setSecond(0);
            reservavo.setFecha(fecha);
            reservavo.setIdCliente(clientevo);
            reservavo.setIdMesa(mesavo.getIdMesa());
            //reservavo.setIdReserva()
            java.lang.Integer result = port.registrarReservas(clientevo, mesavo, reservavo);
            System.out.println("Result = "+result);
            return result;
        } catch (Exception ex) {
            throw ex;
        }

    }

    //preguntar jojojojo
    public static boolean borrarRserva( int idReserva) throws Exception{

        try { // Call Web Service Operation
            restaurante.ClienteDinnerService service = new restaurante.ClienteDinnerService();
            restaurante.ClienteDinner port = service.getClienteDinnerPort();
            // TODO initialize WS operation arguments here
            restaurante.ReservaVO reservavo = new restaurante.ReservaVO();
            // TODO process result here
            boolean result = port.borrarReserva(reservavo);
            System.out.println("Result = "+result);
            return result;
        } catch (Exception ex) {
            throw ex;
            // TODO handle custom exceptions here
        }

    }

     static public ArrayList<DTORestaurante> toDTO(List<SedeVO> sedes, int year, int month , int day ) throws Exception {

        ArrayList<DTORestaurante> dtolist = new ArrayList<DTORestaurante>();

        for (int i = 0; i < sedes.size(); i++)
        {
            List<MesaVO> mesas = getmesasdispobibles(year, month, day, getSedes().get(i).getIdSede());
            for (int j =0; j<mesas.size();j++)
            {
            DTORestaurante dto = new DTORestaurante();
            dto.setDescripcion(mesas.get(j).getIdTipoMesa().getDescripcion());//preguntar ¡¡¡
            dto.setDireccionSede(sedes.get(i).getDireccion());
            dto.setIdSede(sedes.get(i).getIdSede());
            dto.setIdmesa(mesas.get(j).getIdMesa());
            dto.setNombreMesa(mesas.get(j).getNombre());
            dto.setNombreRestaurante(sedes.get(i).getNombre());
            dto.setSillas(mesas.get(j).getSillas());
            dto.setTipo(mesas.get(i).getIdTipoMesa().getNombre());
            dto.setFecha(new Date(year-1900, month-1, day));


            dtolist.add(dto);
            }
        }
        return dtolist;

    }

      static public ArrayList<DTORestaurante> getMesasbyFecha(int year , int month, int day) throws Exception{
       ArrayList<DTORestaurante> dtolist = new ArrayList<DTORestaurante>();

        dtolist = toDTO(getSedes(),year, month, day);


       return dtolist;
      }
}